package javagame;

import gameobjects.*;
import gameobjects.Objekat.oblik;
import gameobjects.PowerUp.tip_powerup;
import gameobjects.Protivnik.tip_protivnika;

import java.util.ArrayList;
import java.util.Iterator;

import javagame.Play.game_mode;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

import gamesound.*;
import gamethreads.*;

public class Level7 extends Level {
	
	private static int brProtivnika = 8;
	private static int brPowerUp = 5;
		
	private Image world;
	private Image rupa;
	private Image rupa2;
	private Animation eksplozija;
	private Animation prolaz;
	private int[] duration;
	private int[] duration2;
	private int[] duration3;
	
	public Level7 (int state) {
		
	}

	public int getID() {
		return 12;
	}

	public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
		Nivo.addLevel(this);
		tenkIgrac = Igrac.dohvIgraca();
		tenkIgrac2 = Igrac2.dohvIgraca();
		protivnik = new Protivnik[brProtivnika];
		protivnikT = new ProtivnikT[brProtivnika];
		budzenje = new PowerUp[brPowerUp];
		kolizija = new Kolizija();
		zvuk = Zvuk.dohvZvuk();
		quit = false;
		shot = false;
		shot2 = false;
		otvoriProlaz = false;
		duration = new int[2];
		duration2 = new int[2];
		duration3 = new int[2];
		duration[0] = duration[1] = 200;
		duration2[0] = duration2[1] = 2000;
		duration3[0]= duration3[1] = 500;
		world = new Image("res/level2_3.png");
		rupa = new Image("res/rupa6.png");
		rupa2 = new Image("res/rupa7.png");
		Image [] eksp = {new Image("res/bum.png"), new Image("res/bum2.png")};
		Image [] prol = {new Image("res/zid_5.png"), new Image("res/cigla_anim2.png")};
		eksplozija = new Animation(eksp, duration2, true);
		prolaz = new Animation(prol, duration3, true);
		dodajObjekte();
		initProtivnika();
		initPowerUp();
		kreiraniProtivnici = false;
	}
	
	public void initProtivnika () throws SlickException {
		Image [] eksp = {new Image("res/bum.png"), new Image("res/bum2.png")};
		protivnik[0] = new Top(tenkIgrac, tenkIgrac2, this);
		protivnik[1] = new CrniTenk(tenkIgrac, tenkIgrac2, this);
		protivnik[2] = new CrniTenk(tenkIgrac, tenkIgrac2, this);
		protivnik[3] = new CrniTenk(tenkIgrac, tenkIgrac2, this);
		protivnik[4] = new CrniTenk(tenkIgrac, tenkIgrac2, this);
		protivnik[5] = new SiviTenk(tenkIgrac, tenkIgrac2, this);
		protivnik[6] = new SiviTenk(tenkIgrac, tenkIgrac2, this);
		protivnik[7] = new SiviTenk(tenkIgrac, tenkIgrac2, this);
		for (int i=0; i<protivnik.length; i++) {
			protivnik[i].setAnimation();
			protivnik[i].setEksplozija(new Animation(eksp, duration2, true));
			protivnik[i].setMeci(new ArrayList<Metak>());
		}
		kreiraniProtivnici = true;
	}
	
	public void postaviProtivnike () {
		if(mod == game_mode.MOD1) {
			protivnik[0].setProtivnikX(100);
			protivnik[0].setProtivnikY(275);
			protivnik[1].setProtivnikX(100);
			protivnik[1].setProtivnikY(100);
			protivnik[2].setProtivnikX(100);
			protivnik[2].setProtivnikY(600);
			protivnik[3].setProtivnikX(850);
			protivnik[3].setProtivnikY(100);
			protivnik[4].setProtivnikX(400);
			protivnik[4].setProtivnikY(600);
			protivnik[5].setProtivnikX(700);
			protivnik[5].setProtivnikY(600);
			protivnik[6].setProtivnikX(300);
			protivnik[6].setProtivnikY(400);
			protivnik[7].setProtivnikX(500);
			protivnik[7].setProtivnikY(100);
			for (int i=0; i<protivnik.length; i++) {
				protivnik[i].setImaDvaIgraca(dvaIgraca);
				protivnik[i].postaviTezinu();
				protivnik[i].setZid2(50);
			}
		}
	}
	
	public void initPowerUp () throws SlickException {
		Image stit = new Image("res/stit.png");
		Image cKrst = new Image("res/crveni_krst.png");
		Image dolar = new Image("res/bod.png");
		budzenje[0] = new PowerUp(stit, dolar, tip_powerup.SHIELD);
		for (int i=1; i<budzenje.length; i++)
			budzenje[i] = new PowerUp(cKrst, dolar, tip_powerup.HEALTH);
	}
	
	public void resetProlaz () {
		eksplozija.setLooping(true);
		prolaz.setLooping(true);
		eksplozija.restart();
		prolaz.restart();
	}
	
	public void dodajObjekte() {		
		//zidovi
		//gore
		kolizija.dodajPravougaonik(0, 0, 459, 50);
		kolizija.dodajPravougaonik(564, 0, 460, 50);
		//levo
		kolizija.dodajPravougaonik(0, 0, 50, 331);
		kolizija.dodajPravougaonik(0, 436, 50, 332);
		//dole i desno
		kolizija.dodajPravougaonik(0, 718, 900, 50);
		kolizija.dodajPravougaonik(974, 0, 50, 300);
		
		kolizija.dodajPravougaonik(50, 200, 250, 50);
		kolizija.dodajPravougaonik(250, 470, 50, 250);
		kolizija.dodajPravougaonik(300, 470, 200, 50);
		kolizija.dodajPravougaonik(450, 320, 50, 150);
		kolizija.dodajPravougaonik(900, 520, 50, 250);
		kolizija.dodajPravougaonik(725, 200, 50, 250);
		kolizija.dodajPravougaonik(775, 300, 250, 50);
	}

	public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
		g.drawImage(world, 0, 0);
		
		if(mod == game_mode.MOD1) {
			for (int i=0; i<protivnik.length; i++) {
				if (protivnik[i].isUbiven() == true) {
					if(protivnik[i].getVrsta() == tip_protivnika.CRNI) {
						if (budzenje[i].isPokupljen() == false) {
							budzenje[i].setxKoord(protivnik[i].getProtivnikX());
							budzenje[i].setyKoord(protivnik[i].getProtivnikY());
							budzenje[i].crtaj();
						}
					}
					protivnik[i].eksplodiraj();
				}
			}
		}
		/*if(mod == game_mode.MOD2) {
			for (int i=0; i<protivnikT.length; i++) {
				if (protivnikT[i].isUbiven() == true) {
					if(protivnikT[i].getVrsta() == tip_protivnika.CRNI) {
						if (budzenje[i].isPokupljen() == false) {
							budzenje[i].setxKoord(protivnikT[i].getProtivnikX());
							budzenje[i].setyKoord(protivnikT[i].getProtivnikY());
							budzenje[i].crtaj();
						}
					}
					protivnikT[i].eksplodiraj();
				}
			}
		}*/
		if (krajNivoa()) prolaz.draw(460, 0);
		if (krajNivoa() && otvoriProlaz==true) {
			rupa.draw(460, 0);
			rupa2.draw(0, 332);
			eksplozija.draw(485, 25);
			eksplozija.setLooping(false);
			prolaz.setLooping(false);
		}
		if (tenkIgrac.isZiv()) {
			tenkIgrac.crtaj(g);
		}
		else
			tenkIgrac.eksplodiraj();
		if (dvaIgraca) {
			if (tenkIgrac2.isZiv()) {
				tenkIgrac2.crtaj(g);
			}
			else
				tenkIgrac2.eksplodiraj();
		}	
		
		if (shot) {
			for (Iterator<Metak> i = tenkIgrac.getMetak().iterator(); i.hasNext();) {
				Metak m = i.next();
				m.crtaj(g);
			}
			for (Iterator<Metak> i = tenkIgrac.getRakete().iterator(); i.hasNext();) { //crtanje raketa(sekundarnog oruzja)
				Metak r = i.next();
				r.crtaj(g);
			}
		}
		if (shot2) {
			for (Iterator<Metak> i = tenkIgrac2.getMetak().iterator(); i.hasNext();) { //crtanje metkova
				Metak m = i.next();
				m.crtaj(g);
			}
			for (Iterator<Metak> i = tenkIgrac2.getRakete().iterator(); i.hasNext();) { //crtanje raketa(sekundarnog oruzja)
				Metak r = i.next();
				r.crtaj(g);
			}
		}
		if(mod == game_mode.MOD1) {
			for (int i=0; i<protivnik.length; i++) {
				if (protivnik[i].isUbiven() == false) protivnik[i].crtaj(g);
				for (Iterator<Metak> j = protivnik[i].getMeci().iterator(); j.hasNext();) {
					Metak m = j.next();
					m.crtaj(g);
				}
			}
		}
		/*if(mod == game_mode.MOD2) {
			for (int i=0; i<protivnikT.length; i++) {
				if (protivnikT[i].isUbiven() == false) protivnikT[i].crtaj();
				for (Iterator<Metak> j = protivnikT[i].getMeci().iterator(); j.hasNext();) {
					Metak m = j.next();
					m.crtaj(g);
				}
			}
		}*/
		if (quit == true) {
			crtajPauzu(g);
		}
	}
	
	public void kretanje (int delta) throws SlickException {
		if (mod == game_mode.MOD1)
		for (int i=0; i<protivnik.length; i++) {
			if (protivnik[i].isUbiven() == false && (tenkIgrac.isZiv() || tenkIgrac2.isZiv()))
					protivnik[i].protivnikAI(delta, kolizija, false);
			for (Iterator<Metak> j = protivnik[i].getMeci().iterator(); j.hasNext();) { // kretanje metka protivnika
				Metak m = j.next();
				m.pomerajMetka(delta);
				if (m.getMetakX()>tenkIgrac.getTenkX() 
						&& m.getMetakX()<(tenkIgrac.getTenkX() + 50) 
						&& m.getMetakY()>tenkIgrac.getTenkY() 
						&& m.getMetakY()<(tenkIgrac.getTenkY() + 50)) {
					if(tenkIgrac.getTenk_HP() >= 0 && tenkIgrac.isShield_flag() == false){
						tenkIgrac.setTenk_HP(tenkIgrac.getTenk_HP() - 1);
						if(tenkIgrac.isZvezda() == true) {
							tenkIgrac.setZvezda(false);
							tenkIgrac.setAnimation();
						}
						zvuk.eksplodiraj();
						j.remove();
					}
					else if(tenkIgrac.isShield_flag() == true){
						tenkIgrac.setShield_flag(false);
						zvuk.eksplodiraj();
						j.remove();
					}
				}
				if (dvaIgraca && tenkIgrac2.isZiv() && m.getMetakX()>tenkIgrac2.getTenkX() 
						&& m.getMetakX()<(tenkIgrac2.getTenkX() + 50) 
						&& m.getMetakY()>tenkIgrac2.getTenkY() 
						&& m.getMetakY()<(tenkIgrac2.getTenkY() + 50)) {
					if(tenkIgrac2.getTenk_HP() >= 0 && tenkIgrac2.isShield_flag() == false){
						tenkIgrac2.setTenk_HP(tenkIgrac2.getTenk_HP() - 1);
						if(tenkIgrac2.isZvezda() == true) {
							tenkIgrac2.setZvezda(false);
							tenkIgrac2.setAnimation();
						}
						zvuk.eksplodiraj();
						j.remove();
					}
					else if(tenkIgrac2.isShield_flag() == true){
						tenkIgrac2.setShield_flag(false);
						zvuk.eksplodiraj();
						j.remove();
					}
				}
				if(tenkIgrac.getTenk_HP() <= 0) {
					tenkIgrac.setZiv(false);
				}
				if(dvaIgraca && tenkIgrac2.getTenk_HP() <= 0) {
					tenkIgrac2.setZiv(false);
				}
				if (pogodioKutiju(m)) j.remove();
				else if (m.getMetakY()<50 || m.getMetakY()>768 
						|| m.getMetakX()<50 || m.getMetakX()>1024)
					j.remove();
			}
		}
		/*if (mod == game_mode.MOD2)
		for (int i=0; i<protivnikT.length; i++) {
			protivnikT[i].setDelta(delta);
			for (Iterator<Metak> j = protivnikT[i].getMeci().iterator(); j.hasNext();) { // kretanje metka protivnika
				Metak m = j.next();
				m.pomerajMetka(delta);
				if (m.getMetakX()>tenkIgrac.getTenkX() 
						&& m.getMetakX()<(tenkIgrac.getTenkX() + 50) 
						&& m.getMetakY()>tenkIgrac.getTenkY() 
						&& m.getMetakY()<(tenkIgrac.getTenkY() + 50)) {
					if(tenkIgrac.getTenk_HP() >= 0 && tenkIgrac.isShield_flag() == false){
						tenkIgrac.setTenk_HP(tenkIgrac.getTenk_HP() - 1);
						if(tenkIgrac.isZvezda() == true) {
							tenkIgrac.setZvezda(false);
							tenkIgrac.setAnimation();
						}
						zvuk.eksplodiraj();
						j.remove();
					}
					else if(tenkIgrac.isShield_flag() == true){
						tenkIgrac.setShield_flag(false);
						zvuk.eksplodiraj();
						j.remove();
					}
				}
				if(tenkIgrac.getTenk_HP() <= 0) tenkIgrac.setZiv(false);
				if (pogodioKutiju(m)) j.remove();
				if (m.getMetakY()<50 || m.getMetakY()>768
						|| m.getMetakX()<50 || m.getMetakX()>1024)
					j.remove();
			}
		}*/
	}
	
	
	public  boolean pogodioKutiju (Metak m) {
		return (!mozeFull(kolizija.getObjekatList(), m.getMetakX(), m.getMetakY(), 0, 0));
	}
	
	public  boolean pogodioNestoRaketa (Metak r) {
		for(int i=0; i<kolizija.getObjekatList().size(); i++) {
			Objekat tempOb = kolizija.getObjekatList().get(i);
			if(tempOb.getObl() == oblik.KVADRAT) {
				if ((r.getSmer()==0 || r.getSmer()==1)
						 && (r.getMetakX() + 6.5 <= tempOb.getxOb()+tempOb.getSize()
			    		 && r.getMetakX() + 6.5 >= tempOb.getxOb()
			    		 && r.getMetakY() + 15 <= tempOb.getyOb()+tempOb.getSize()
			    		 && r.getMetakY() + 15 >= tempOb.getyOb()))
					return true;
				else if ((r.getSmer()==2 || r.getSmer()==3)
						 && (r.getMetakX() + 15 <= tempOb.getxOb()+tempOb.getSize()
			    		 && r.getMetakX() + 15 >= tempOb.getxOb()
			    		 && r.getMetakY() + 6.5 <= tempOb.getyOb()+tempOb.getSize()
			    		 && r.getMetakY() + 6.5 >= tempOb.getyOb()))
					return true;
			}
			if(tempOb.getObl() == oblik.PRAVOUGAONIK) {
				Pravougaonik p = (Pravougaonik) tempOb;
	   			if ((r.getSmer()==0 || r.getSmer()==1)
	   					 && (r.getMetakX() + 6.5 <= p.getxOb()+p.getxSize()
		        		 && r.getMetakX() + 6.5 >= p.getxOb()
		        		 && r.getMetakY() + 15 <= p.getyOb()+p.getySize()
		        		 && r.getMetakY() + 15 >= p.getyOb()))
	   				return true;
	   			if ((r.getSmer()==2 || r.getSmer()==3)
	   					 && (r.getMetakX() + 15 <= p.getxOb()+p.getxSize()
		        		 && r.getMetakX() + 15 >= p.getxOb()
		        		 && r.getMetakY() + 6.5 <= p.getyOb()+p.getySize()
		        		 && r.getMetakY() + 6.5 >= p.getyOb()))
	   				return true;
			}
		}
		return false;
	}
	
	public void kretanjeMetka (int delta) {
		for (Iterator<Metak> i = tenkIgrac.getMetak().iterator(); i.hasNext();) {
			Metak m = i.next();
			m.pomerajMetka(delta);
			if(mod == game_mode.MOD1) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false 
							&& m.getMetakX() > protivnik[j].getProtivnikX() 
							&& m.getMetakX() < (protivnik[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnik[j].getProtivnikY() 
							&& m.getMetakY() < (protivnik[j].getProtivnikY() + 50)) {
						protivnik[j].setHP(protivnik[j].getHP() - 1);
						if(protivnik[j].getHP() == 0) {
							protivnik[j].setUbiven(true);
							if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
								tenkIgrac.setBodovi(bodovi[0]);
							if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
								tenkIgrac.setBodovi(bodovi[1]);
							if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
								tenkIgrac.setBodovi(bodovi[2]);
							if(j<brPowerUp)
								budzenje[j].izbaci();
						}
						zvuk.eksplodiraj();
						i.remove();
					}
				}
			}
			if(mod == game_mode.MOD2) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& m.getMetakX() > protivnikT[j].getProtivnikX() 
							&& m.getMetakX() < (protivnikT[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnikT[j].getProtivnikY() 
							&& m.getMetakY() < (protivnikT[j].getProtivnikY() + 50)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 1);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() == 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioKutiju(m)) i.remove();
			else if (krajNivoa() && m.getMetakX()>=460 && m.getMetakX()<560 && m.getMetakY()<50) {
					if (!otvoriProlaz) {
						otvoriProlaz = true;
						tenkIgrac.setBodovi(bodovi[7]);
						zvuk.eksplodiraj();
						i.remove();
					}
					else if ( m.getMetakY()<0 ) i.remove();
			}
			else if (otvoriProlaz && m.getMetakY()>=332 && m.getMetakY()<432 && m.getMetakX()<50){
				if (m.getMetakX()<0) i.remove();
			}
			else if (m.getMetakY()<50 || m.getMetakY()>768 || m.getMetakX()<50 || m.getMetakX()>1024) i.remove();
		}
	}
	
	public void kretanjeMetkaDva (int delta) {
		for (Iterator<Metak> i = tenkIgrac2.getMetak().iterator(); i.hasNext();) {
			Metak m = i.next();
			m.pomerajMetka(delta);
			if(mod == game_mode.MOD1) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false 
							&& m.getMetakX() > protivnik[j].getProtivnikX() 
							&& m.getMetakX() < (protivnik[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnik[j].getProtivnikY() 
							&& m.getMetakY() < (protivnik[j].getProtivnikY() + 50)) {
						protivnik[j].setHP(protivnik[j].getHP() - 1);
						if(protivnik[j].getHP() == 0) {
							protivnik[j].setUbiven(true);
							if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
								tenkIgrac2.setBodovi(bodovi[0]);
							if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
								tenkIgrac2.setBodovi(bodovi[1]);
							if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
								tenkIgrac2.setBodovi(bodovi[2]);
							if(j<brPowerUp)
								budzenje[j].izbaci();
						}
						zvuk.eksplodiraj();
						i.remove();
					}
				}
			}
			if(mod == game_mode.MOD2) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& m.getMetakX() > protivnikT[j].getProtivnikX() 
							&& m.getMetakX() < (protivnikT[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnikT[j].getProtivnikY() 
							&& m.getMetakY() < (protivnikT[j].getProtivnikY() + 50)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 1);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() == 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioKutiju(m)) i.remove();
			else if (krajNivoa() && m.getMetakX()>=460 && m.getMetakX()<560 && m.getMetakY()<50) {
				if (!otvoriProlaz) {
					otvoriProlaz = true;
					tenkIgrac.setBodovi(bodovi[7]);
					zvuk.eksplodiraj();
					i.remove();
				}
				else if ( m.getMetakY()<0 ) i.remove();
			}
			else if (otvoriProlaz && m.getMetakY()>=332 && m.getMetakY()<432 && m.getMetakX()<50){
				if (m.getMetakX()<0) i.remove();
			}
			else if (m.getMetakY()<50 || m.getMetakY()>768 || m.getMetakX()<50 || m.getMetakX()>1024) i.remove();
		}
	}
	
	public void kretanjeRakete (int delta) { //kretanje sekundarnog oruzja samog igraca
		for (Iterator<Metak> i = tenkIgrac.getRakete().iterator(); i.hasNext();) {
			Metak r = i.next();
			r.pomerajMetka(delta);
			if(mod == game_mode.MOD1) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false) {
						if ((r.getSmer()==0 || r.getSmer()==1)
								&& r.getMetakX() + 6.5 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 6.5 < (protivnik[j].getProtivnikX() + 50) 
								&& r.getMetakY() + 15 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 15 < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
									tenkIgrac.setBodovi(bodovi[0]);
								if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
									tenkIgrac.setBodovi(bodovi[1]);
								if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
									tenkIgrac.setBodovi(bodovi[2]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
						else if ((r.getSmer()==2 || r.getSmer()==3)
								&& r.getMetakX() + 15 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 15 < (protivnik[j].getProtivnikX() + 50) 
								&& r.getMetakY() + 6.5 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 6.5 < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
									tenkIgrac.setBodovi(bodovi[0]);
								if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
									tenkIgrac.setBodovi(bodovi[1]);
								if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
									tenkIgrac.setBodovi(bodovi[2]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
				}
			}
			if(mod == game_mode.MOD2) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& r.getMetakX() > protivnikT[j].getProtivnikX() 
							&& r.getMetakX() < (protivnikT[j].getProtivnikX() + 50) 
							&& r.getMetakY() > protivnikT[j].getProtivnikY() 
							&& r.getMetakY() < (protivnikT[j].getProtivnikY() + 50)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 5);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() <= 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioNestoRaketa(r)) i.remove();
			else if (krajNivoa() && r.getMetakX()>=456 && r.getMetakX()<556 && r.getMetakY()<50) {
				if (!otvoriProlaz) {
					otvoriProlaz = true;
					tenkIgrac.setBodovi(bodovi[7]);
					zvuk.eksplodiraj();
					i.remove();
				}
				else if ( r.getMetakY()<0 ) i.remove();
			}
			else if (otvoriProlaz && r.getMetakY()>=328 && r.getMetakY()<428 && r.getMetakX()<50){
				if (r.getMetakX()<0) i.remove();
			}
			else if (r.getMetakY()<50 || r.getMetakY()>768 || r.getMetakX()<50 || r.getMetakX()>1024) i.remove();
		}
	}
	
	public void kretanjeRaketeDva (int delta) { //kretanje sekundarnog oruzja samog igraca
		for (Iterator<Metak> i = tenkIgrac2.getRakete().iterator(); i.hasNext();) {
			Metak r = i.next();
			r.pomerajMetka(delta);
			if(mod == game_mode.MOD1) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false) {
						if ((r.getSmer()==0 || r.getSmer()==1)
								&& r.getMetakX() + 6.5 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 6.5 < (protivnik[j].getProtivnikX() + 50) 
								&& r.getMetakY() + 15 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 15 < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
									tenkIgrac2.setBodovi(bodovi[0]);
								if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
									tenkIgrac2.setBodovi(bodovi[1]);
								if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
									tenkIgrac2.setBodovi(bodovi[2]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
						else if ((r.getSmer()==2 || r.getSmer()==3)
								&& r.getMetakX() + 15 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 15 < (protivnik[j].getProtivnikX() + 50) 
								&& r.getMetakY() + 6.5 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 6.5 < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
									tenkIgrac2.setBodovi(bodovi[0]);
								if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
									tenkIgrac2.setBodovi(bodovi[1]);
								if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
									tenkIgrac2.setBodovi(bodovi[2]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
				}
			}
			if(mod == game_mode.MOD2) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& r.getMetakX() > protivnikT[j].getProtivnikX() 
							&& r.getMetakX() < (protivnikT[j].getProtivnikX() + 50) 
							&& r.getMetakY() > protivnikT[j].getProtivnikY() 
							&& r.getMetakY() < (protivnikT[j].getProtivnikY() + 50)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 5);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() <= 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioNestoRaketa(r)) i.remove();
			else if (krajNivoa() && r.getMetakX()>=456 && r.getMetakX()<556 && r.getMetakY()<50) {
				if (!otvoriProlaz) {
					otvoriProlaz = true;
					tenkIgrac.setBodovi(bodovi[7]);
					zvuk.eksplodiraj();
					i.remove();
				}
				else if ( r.getMetakY()<0 ) i.remove();
			}
			else if (otvoriProlaz && r.getMetakY()>=328 && r.getMetakY()<428 && r.getMetakX()<50){
				if (r.getMetakX()<0) i.remove();
			}
			else if (r.getMetakY()<50 || r.getMetakY()>768 || r.getMetakX()<50 || r.getMetakX()>1024) i.remove();
		}
	}
	
	public void moveLeft (int delta, int ivica) {
		tenkIgrac.setTenk(tenkIgrac.getMovingLeft());
		tenkIgrac.setAutoUpdate(true);
		tenkIgrac.setTenkX(tenkIgrac.getTenkX() - delta * .1f * 1.5f);
		if (krajNivoa() && (tenkIgrac.getTenkX()<ivica) && (tenkIgrac.getTenkY()>331) && (tenkIgrac.getTenkY()<386) && (otvoriProlaz==true)) {
			tenkIgrac.setTenkX(tenkIgrac.getTenkX() - delta * .1f * 1.5f);
		}
		if (tenkIgrac.getTenkX() < ivica) {
			tenkIgrac.setTenkX(tenkIgrac.getTenkX() + delta * .1f * 1.5f);
		}
		if (dvaIgraca && !mozeIgrac()) {
			tenkIgrac.setTenkX(tenkIgrac.getTenkX() + delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD1) {
			if(!mozeTenk(kolizija.getObjekatList()))
				tenkIgrac.setTenkX(tenkIgrac.getTenkX() + delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD2) {
			if(!mozeTenkPT(kolizija.getObjekatList()))
				tenkIgrac.setTenkX(tenkIgrac.getTenkX() + delta * .1f * 1.5f);
		}
	}
	
	public void moveLeftDva (int delta, int ivica) {
		tenkIgrac2.setTenk(tenkIgrac2.getMovingLeft());
		tenkIgrac2.setAutoUpdate(true);
		tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() - delta * .1f * 1.5f);
		if (krajNivoa() && (tenkIgrac2.getTenkX() < ivica) && (tenkIgrac2.getTenkY()>331) && (tenkIgrac2.getTenkY()<386) && (otvoriProlaz==true)) {
			tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() - delta * .1f * 1.5f);
		}
		if (tenkIgrac2.getTenkX() < ivica) {
			tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() + delta * .1f * 1.5f);
		}
		if (dvaIgraca && !mozeIgrac()) {
			tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() + delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD1) {
			if(!mozeTenkDva(kolizija.getObjekatList()))
				tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() + delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD2) {
			if(!mozeTenkDvaPT(kolizija.getObjekatList()))
				tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() + delta * .1f * 1.5f);
		}
	}

	public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
		Input input = gc.getInput();
		Nivo.setNivo(12);
		if (!zvuk.dohvTekucu().playing()) {
			zvuk.pustiMuziku();
		}
		if (!dvaIgraca) {
			if (tenkIgrac.isZiv() == false) {
				Nivo.setVerticalLevel(true);
				tenkIgrac.ozivi();
				oziviSve();
				sbg.enterState(4);
			}
		}
		else {
			if (tenkIgrac.isZiv() == false && tenkIgrac2.isZiv() == false) {
				Nivo.setVerticalLevel(true);
				tenkIgrac.ozivi();
				tenkIgrac2.ozivi();
				oziviSve();
				sbg.enterState(4);
			}
		}
		fullScreenOnOff(gc);
		if (quit==false) {
			kretanje(constDelta);
			pokupi();
			
			if (shot) {
				kretanjeMetka(constDelta);
				kretanjeRakete(constDelta);
			}
			if (shot2) {
				kretanjeMetkaDva(constDelta);
				kretanjeRaketeDva(constDelta);
			}
			
			tenkIgrac.odbrojavaj();
			tenkIgrac2.odbrojavaj();
			
			//================prvi igrac
			//shot
			if(input.isKeyPressed(Input.KEY_SPACE) && tenkIgrac.isZiv()==true) {
				zvuk.pucaj();
				shot = true;
				tenkIgrac.pucaj(true);
			}
			//secundary shot
			if(input.isKeyPressed(Input.KEY_LCONTROL) && tenkIgrac.isZiv()==true) {
				if (tenkIgrac.isRaketa()) {
					shot = true;
					tenkIgrac.pucajRaketu();
				}
			}
			//up
			if(input.isKeyDown(Input.KEY_UP) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkX()>=-50) {
				moveUp(constDelta, 50);
				if (tenkIgrac.getTenkY()<0) {
					if (tenkIgrac2.isPresao()) {
						tenkIgrac.noviLevel(dvaIgraca);
						tenkIgrac2.noviLevel();
						sbg.enterState(14);
					}
					else {
						tenkIgrac.setPresao(true);
					}
					if (!dvaIgraca || tenkIgrac2.isZiv() == false) {
						tenkIgrac.noviLevel(dvaIgraca);
						sbg.enterState(14);
					}
				}
			}
			//down
			else if(input.isKeyDown(Input.KEY_DOWN) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkX()>=-50) {
				moveDown(constDelta, 718);
				if (tenkIgrac.getTenkY()>0) {
					tenkIgrac.setPresao(false);
				}
			}
			//left
			else if(input.isKeyDown(Input.KEY_LEFT) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkY()>=-50) {
				moveLeft(constDelta, 50);
				if (tenkIgrac.getTenkX()<0 ) {
					if (tenkIgrac2.isPresaoBonus()) {
						tenkIgrac.noviLevelBonus(dvaIgraca);
						tenkIgrac2.noviLevelBonus();
						sbg.enterState(13);
					}
					else {
						tenkIgrac.setPresaoBonus(true);
					}
					if (!dvaIgraca || tenkIgrac2.isZiv() == false) {
						tenkIgrac.noviLevel(dvaIgraca);
						sbg.enterState(13);
					}
				}
			}
			//right
			else if(input.isKeyDown(Input.KEY_RIGHT) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkY()>=-50) {
				moveRight(constDelta, 974);
				if (tenkIgrac.getTenkX()>0 ) {
					tenkIgrac.setPresaoBonus(false);
				}
			}
			else {
				tenkIgrac.setAutoUpdate(false);
			}
			//============drugi igrac
			if (dvaIgraca) {
				//shot
				if(input.isControlPressed(6, input.getControllerCount()-1) && tenkIgrac2.isZiv()==true) {
					zvuk.pucaj();
					shot2 = true;
					tenkIgrac2.pucaj(true);
				}
				//secundary shot
				if(input.isControlPressed(5, input.getControllerCount()-1) && tenkIgrac2.isZiv()==true) {
					if (tenkIgrac2.isRaketa()) {
						shot2 = true;
						tenkIgrac2.pucajRaketu();
					}
				}
				//up
				if(input.isControllerUp(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkX()>=-50) {
					moveUpDva(constDelta, 50);
					if (tenkIgrac2.getTenkY()<0) {
						if (tenkIgrac.isPresao()) {
							tenkIgrac.noviLevel(dvaIgraca);
							tenkIgrac2.noviLevel();
							sbg.enterState(14);
						}
						else {
							tenkIgrac2.setPresao(true);
						}
						if (tenkIgrac.isZiv() == false) {
							tenkIgrac2.noviLevel();
							sbg.enterState(14);
						}
					}
				}
				//down
				else if(input.isControllerDown(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkX()>=-50) {
					moveDownDva(constDelta, 718);
					if (tenkIgrac2.getTenkY()>0) {
						tenkIgrac2.setPresao(false);
					}
				}
				//left
				else if(input.isControllerLeft(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkY()>=-50) {
					moveLeftDva(constDelta, 50);
					if (tenkIgrac2.getTenkX()<0) {
						if (tenkIgrac.isPresaoBonus()) {
							tenkIgrac.noviLevelBonus(dvaIgraca);
							tenkIgrac2.noviLevelBonus();
							sbg.enterState(13);
						}
						else {
							tenkIgrac2.setPresaoBonus(true);
						}
						if (tenkIgrac.isZiv() == false) {
							tenkIgrac2.noviLevel();
							sbg.enterState(13);
						}
					}
				}
				//right
				else if(input.isControllerRight(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkY()>=-50) {
					moveRightDva(constDelta, 974);
					if (tenkIgrac2.getTenkX()>0 ) {
						tenkIgrac2.setPresaoBonus(false);
					}
				}
				else {
					tenkIgrac2.setAutoUpdate(false);
				}
				
				if (input.isControlPressed(13, input.getControllerCount()-1)) {
					quit = true;
				}
			}
			
			//escape
			if (input.isKeyDown(Input.KEY_ESCAPE)) {
				quit = true;
			}
		}
		//when escape i clicked
		if (quit == true) {
			if (input.isKeyDown(Input.KEY_R)) {
				quit = false;
			}
			if (input.isKeyDown(Input.KEY_M)) {
				mainMenu(sbg);
			}
			if (input.isKeyDown(Input.KEY_Q)) {
				gc.exit();
			}
		}
	}

}
